/*
 * @Author: 13177709051 3506463075@qq.com
 * @Date: 2024-11-05 22:12:15
 * @LastEditors: 13177709051 3506463075@qq.com
 * @LastEditTime: 2024-11-14 12:25:11
 * @FilePath: /linux31/udp_echo_server/UdpServerMain.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include "UdpServer.hpp"

#include <memory>

// ./udp_server local-port
// ./udp_server 8888


// 这部分代码检查程序是否接收到了正确数量的命令行参数。程序需要一个命令行参数（即本地端口号）。如果参数个数不是 2（程序名 + 本地端口），则输出错误信息，并调用 exit(0) 来终止程序。
// argv[0] 是程序的名称。
// argv[1] 应该是用户指定的端口号。
int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        std::cerr << "Usage: " << argv[0] << " local-port" << std::endl;
        exit(0);
    }
    uint16_t port = std::stoi(argv[1]);

    EnableScreen();  

    // 这行代码使用了智能指针 std::unique_ptr 来管理 UdpServer 对象的生命周期。
    // std::make_unique<UdpServer>(port) 创建了一个 UdpServer 对象，并传入 port 参数（即之前解析的端口号）。std::make_unique 是 C++14 引入的函数，它用来创建一个新的动态分配的对象，并返回一个 std::unique_ptr 指向该对象。
    // std::unique_ptr<UdpServer> 是一个智能指针，负责在 UdpServer 对象不再使用时自动释放内存，避免内存泄漏。
    std::unique_ptr<UdpServer> usvr = std::make_unique<UdpServer>(port); //C++14的标准
    usvr->InitServer();
    usvr->Start();
    return 0;
}